package Atop100.binaryTree;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class  TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
}

public class Class98 {
    List<Integer>  list;
    boolean  res;
    public boolean isValidBST(TreeNode root) {
        list=new ArrayList<>();
        //TODO:2023/10/30 事先声明为true
        res=true;
        if (root.left==null&&root.right==null){
            return  res;
        }
        //TODO:2023/10/30   记住加上下面的这句
        list.add(Integer.MIN_VALUE);
        traverse(root);
        return  res;
    }

    public  void traverse(TreeNode root){
        if (root==null){
           return;
        }
        traverse(root.left);
        if (root.val==Integer.MIN_VALUE){
            list.add(root.val);
        }

        if (root.val<=list.get(list.size()-1)){
            res=false;
            return;
        }
        list.add(root.val);
        traverse(root.right);
    }


    class Solution {
        long pre = Long.MIN_VALUE;
        public boolean isValidBST(TreeNode root) {
            if (root == null) {
                return true;
            }
            // 访问左子树
            if (!isValidBST(root.left)) {
                return false;
            }
            // 访问当前节点：如果当前节点小于等于中序遍历的前一个节点，说明不满足BST，返回 false；否则继续遍历。
            if (root.val < pre) {
                return false;
            }
            pre = root.val;
            // 访问右子树
            return isValidBST(root.right);
        }
    }

}
